// new手写
function Person(name,age){
    // {}
    // 函数的运行过程就是构造对象的过程
    this.name = name;
    this.age = age;
    //return {}
}

Person.prototype.say = function(){
    console.log(this.age);
}

let p2 = {} ;
console.log(p2.__proto__);
// p2.__proto__ Object
p2 = new Person('赖总',18);
console.log(Object.hasOwnProperty('name'),Object.hasOwnProperty('say'));
// p2 ? 做了什么事情？ 给？
// p2.__proto__  Object  -> Person.prototype
// JS 是原型式的面向对象
// p2 的原型对象， 有默认 Object  中间插入 P e r s o n. p r o t o t y p e
// p2. s a  D y
// 手写new myNew
// new Person()
function myNew(fn,...args){//可变形参
   // console.log(fn,args);
   // Object.create
   let obj = Object.create(fn.prototype);
   console.log(obj, '.....',obj.__proto__,'--------------');
   //obj上，  this 属性？
   // 构造的过程 函数运行一下， 并且 this指向obj ？
   //console.log(...args,'----------');
   Person.call(obj, ...args)
   console.log(obj, '//////');
   // 返回 对象
   return obj;
}
let p3 = myNew(Person,'俊严',18);
console.log(p3);
